<?php
declare (strict_types=1);

namespace app\adminapi\controller;

use app\adminapi\extend\tools\jwt\JWT;
use think\exception\ValidateException;
use think\Request;

/**
 * 登录模块有关的接口
 * Class Login
 * @package app\adminapi\controller
 */
class Login
{

    /**
     * 用户登录
     */
    public function login(Request $request)
    {
        # 进行登录信息验证
//        uniapp 前端
        // laravel写的接口、轮播图的接口
        // tp框架写接口
        try {
            # 验证参数是否正确
            validate(\app\adminapi\validate\Login::class)->check($request->all());
            # 生成没有数据库
//            // 根据用户的信息生成一个字符串（token）
//            $token = JWT::getToken(1);
//            # header 负载 签名
//            return success(200,"success",['token' => $token]);

            # 查询数据库、进行认证
            $username = $request->post('username');
            $password = $request->post('password');

            $userInfo = \app\common\model\Admin::where('username', $username)->findOrEmpty();
            if (empty($userInfo)) {
                return fail(2001, '用户名不存在');
            }
            // 验证密码
//            dd(encrypt_password(123456)); 调试
            if ($userInfo->password != encrypt_password($password)) {
                return fail(2001, '密码错误');
            }

            # 三张表 生成token之前、查询用户的权限
            # 根据管理员查询到角色id admin表里面
            $role_id = $userInfo->role_id;

            # 根据角色id查询到权限id role表里面（这一步通过一对一模型关联）
            $role_info = \app\common\model\Role::find($role_id);
            $auth_ids = $role_info->role_auth_ids;

            # 根据权限id查询对应到权限
            $auth = \app\common\model\Auth::whereIn('id',$auth_ids)->select()->toArray();

            $userAuth = [];
            foreach ($auth as $value) {
                $userAuth[] = $value['auth_c'].'/'.$value['auth_a'];
            }
            $userAuth = array_unique($userAuth);

            # 存缓存
            cache('userAuth',$userAuth);


//        # 原来保存session
            # 不保存到session
            # 根据用户信息、生成一个字符串token

            // 根据用户的信息生成一个字符串（token）
            $token = JWT::getToken($userInfo->id);
            # header 负载 签名
            return success(['token' => $token]);
        } catch (ValidateException $exception) {
            return fail(2001, $exception->getMessage());
        }

    }


    /**
     * 验证码的接口
     */
    public function createCaptcha()
    {
        //验证码标识
        $uniqid = uniqid((string)mt_rand(100000, 999999));
        $data = [

//            'img' => 'http://adminapi.pyg.com'.captcha_src(),//本地域名
            'src' => 'http://2002a.shadowsu.top' . captcha_src(),//生成域名

            'uniqid' => $uniqid
        ];
        return success($data);

    }

    /**
     * 退出接口
     *判断某个值是否存在
     */
    public function logout()
    {
        # tpshop退出登录清空session
        # 让当前的token失效

        # 相当于把token的值、放进回收站
        $token = JWT::getRequestToken();
        # 获取已经失效的token
        $fail_token = cache('delete_token') ?: [];
        array_push($fail_token, $token);
        # 放入回收站
        cache('delete_token', $fail_token);
        return success();


    }

    /**
     * 注册
     */
    public function register(Request $request)
    {

        $mobile = $request->post('mobile');
        $password = $request->post('password');
        $is_greed = $request->post('is_greed');// 0 代表不同意 1 代表同意

        if ($is_greed != 1) {
            return fail(2001, '请同意协议');
        }

        # 向数据添加数据

        return success();
    }
}
